<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struct template as_child</title>
<link rel="stylesheet" href="../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
<link rel="home" href="../../../index.html" title="The Boost C++ Libraries BoostBook Documentation Subset">
<link rel="up" href="../domain.html#id-1.3.32.5.9.4.4" title="Description">
<link rel="prev" href="as_expr.html" title="Struct template as_expr">
<link rel="next" href="../default_domain.html" title="Struct default_domain">
<meta name="viewport" content="width=device-width, initial-scale=1">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../boost.png"></td>
<td align="center"><a href="../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="as_expr.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../domain.html#id-1.3.32.5.9.4.4"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../default_domain.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="refentry">
<a name="boost.proto.domain.as_child"></a><div class="titlepage"></div>
<div class="refnamediv">
<h2><span class="refentrytitle">Struct template as_child</span></h2>
<p>boost::proto::domain::as_child — 
            A callable unary MonomorphicFunctionObject that specifies how objects are turned into
            Proto expressions in this domain, for use in scenarios where the resulting expression is
            intended to be made a child of another expression.
          </p>
</div>
<h2 class="refsynopsisdiv-title">Synopsis</h2>
<div class="refsynopsisdiv"><pre class="synopsis"><span class="comment">// In header: &lt;<a class="link" href="../../../proto/reference.html#header.boost.proto.domain_hpp" title="Header &lt;boost/proto/domain.hpp&gt;">boost/proto/domain.hpp</a>&gt;

</span>

<span class="comment">// A callable unary MonomorphicFunctionObject that specifies how objects are
// turned into Proto expressions in this domain, for use in scenarios where
// the resulting expression is intended to be made a child of another
// expression.</span>
<span class="keyword">template</span><span class="special">&lt;</span><span class="keyword">typename</span> T<span class="special">&gt;</span> 
<span class="keyword">struct</span> <a class="link" href="as_child.html" title="Struct template as_child">as_child</a> <span class="special">:</span> <span class="keyword"></span> <a class="link" href="../callable.html" title="Struct callable">proto::callable</a> <span class="special">{</span>
  <span class="comment">// types</span>
  <span class="keyword">typedef</span> <em class="replaceable"><code><span class="identifier">see</span><span class="special">-</span><span class="identifier">below</span></code></em> <a name="boost.proto.domain.as_child.result_type"></a><span class="identifier">result_type</span><span class="special">;</span>

  <span class="comment">// <a class="link" href="as_child.html#id-1_3_32_5_7_2_1_1_9_6-bb">public member functions</a></span>
  <span class="identifier">result_type</span> <a class="link" href="as_child.html#id-1_3_32_5_7_2_1_1_9_6_1-bb"><span class="keyword">operator</span><span class="special">(</span><span class="special">)</span></a><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span><span class="special">)</span> <span class="keyword">const</span><span class="special">;</span>
<span class="special">}</span><span class="special">;</span></pre></div>
<div class="refsect1">
<a name="id-1.3.32.5.9.4.4.8.4"></a><h2>Description</h2>
<p>
              A unary MonomorphicFunctionObject that specifies how objects are turned into Proto
              expressions in this domain. The resulting expression object is suitable for storage
              as a child of another expression. In that scenario, it is usually
              preferable to store child expressions by reference; or, in the case of objects that
              are not yet Proto expressions, to wrap them by reference in a new Proto terminal
              expression. (Contrast this description with the description for
              <code class="computeroutput"><a class="link" href="as_expr.html" title="Struct template as_expr">proto::domain::as_expr</a></code>.)
            </p>
<p>
              The <code class="computeroutput">as_child</code> function object turns objects into
              Proto expressions, if  they are not already, by making them Proto terminals held by
              reference. Objects that are already Proto expressions are simply returned by
              reference. If
              <code class="computeroutput">wants_basic_expr&lt;Generator&gt;::value</code> is true,
              then let <span class="emphasis"><em>E</em></span> be
              <code class="computeroutput"><a class="link" href="../basic_expr.html" title="Struct template basic_expr">proto::basic_expr</a></code>;
              otherwise, let <span class="emphasis"><em>E</em></span> be
              <code class="computeroutput"><a class="link" href="../expr.html" title="Struct template expr">proto::expr</a></code>.
              Given an lvalue <code class="computeroutput">t</code> of type
              <code class="computeroutput">T</code>:
              </p>
<div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; ">
<li class="listitem">
                  If <code class="computeroutput">T</code> is not a Proto expression type, the resulting
                  terminal is
                  <code class="computeroutput">Generator()(<em class="replaceable"><code>E</code></em>&lt;tag::terminal, 
                  term&lt; <code class="computeroutput">T &amp;</code> &gt; &gt;::make(t))</code>.
                </li>
<li class="listitem">
                  Otherwise, the result is the lvalue <code class="computeroutput">t</code>.
                </li>
</ul></div>
<p>
            </p>
<div class="refsect2">
<a name="id-1.3.32.5.9.4.4.8.4.4"></a><h3>
<a name="id-1_3_32_5_7_2_1_1_9_6-bb"></a><code class="computeroutput">as_child</code> public member functions</h3>
<div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">
<pre class="literallayout"><span class="identifier">result_type</span> <a name="id-1_3_32_5_7_2_1_1_9_6_1-bb"></a><span class="keyword">operator</span><span class="special">(</span><span class="special">)</span><span class="special">(</span><span class="identifier">T</span> <span class="special">&amp;</span> t<span class="special">)</span> <span class="keyword">const</span><span class="special">;</span></pre>
<div class="variablelist"><table border="0" class="variablelist compact">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody><tr>
<td><p><span class="term">Parameters:</span></p></td>
<td><div class="variablelist"><table border="0" class="variablelist compact">
<colgroup>
<col align="left" valign="top">
<col>
</colgroup>
<tbody><tr>
<td><p><span class="term"><code class="computeroutput">t</code></span></p></td>
<td><p>The object to wrap.</p></td>
</tr></tbody>
</table></div></td>
</tr></tbody>
</table></div>
</li></ol></div>
</div>
</div>
</div>
<div class="copyright-footer">Copyright © 2008 Eric Niebler<p>
        Distributed under the Boost Software License, Version 1.0. (See accompanying
        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
      </p>
</div>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="as_expr.html"><img src="../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../domain.html#id-1.3.32.5.9.4.4"><img src="../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="../default_domain.html"><img src="../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>
